package com.ruoyi.drone.config;

import com.ruoyi.drone.interceptor.JwtAuthenticationInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * Web配置类
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private JwtAuthenticationInterceptor jwtAuthenticationInterceptor;

    @Value("${ruoyi.profile:/home/ruoyi/uploadPath}")
    private String uploadPath;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(jwtAuthenticationInterceptor)
                .addPathPatterns(
                    "/drone/register/profile/**",      // 用户档案相关
                    "/drone/task/**",                  // 任务相关
                    "/drone/taskSimple/**",            // 简化版任务相关
                    "/drone/taskCategory/**",          // 任务分类相关
                    "/drone/organization/**",          // 组织相关
                    "/drone/pilot/**",                 // 飞手相关
                    "/drone/user/**"                   // 用户身份相关
                )
                .excludePathPatterns(
                    "/drone/register/captcha",         // 验证码接口
                    "/drone/register/login",           // 登录接口
                    "/drone/register/pilot",           // 飞手注册
                    "/drone/register/organization",    // 组织注册
                    "/drone/register/checkUserName/**", // 用户名检查
                    "/drone/register/checkPhone/**",   // 手机号检查
                    "/drone/register/checkEmail/**",   // 邮箱检查
                    "/drone/register/checkOrgName/**", // 组织名检查
                    "/drone/register/checkIdCardFront/**", // 身份证正面检查
                    "/drone/register/checkIdCardBack/**",  // 身份证反面检查
                    "/drone/register/checkAge/**",     // 年龄检查
                    "/drone/register/checkFlightYears/**", // 飞行年限检查
                    "/drone/register/checkExplorationInfo/**", // 探险信息检查
                    "/drone/register/checkQualification/**",  // 资质检查
                    "/drone/photo/**",                 // 照片上传接口
                    "/drone/task/upload/**",           // 任务图片上传接口
                    "/drone/task/delete/image",        // 任务图片删除接口
                    "/drone/task/validate/image",      // 任务图片验证接口
                    "/drone/taskSimple/categories",    // 获取任务分类（无需认证）
                    "/drone/taskCategory/listEnabled", // 获取启用的任务分类（无需认证）
                    "/drone/taskCategory/tasks/**",    // 根据分类查询任务（无需认证）
                    
                    // 为了兼容系统统一的登录态，这里放行飞手列表查询与详情，避免与自定义JWT冲突
                    "/drone/user/pilot/**",            // 飞手列表与详情（无需本拦截器校验）
                    "/drone/organization/**",          // 组织列表与详情（无需本拦截器校验）
                    "/drone/taskManagement/**",         // 任务管理列表与详情（无需本拦截器校验）
                    "/drone/taskCategory/**"         // 任务管理列表与详情（无需本拦截器校验）
                );
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        /** 本地文件上传路径 */
        registry.addResourceHandler("/profile/**")
                .addResourceLocations("file:" + uploadPath + "/");
    }
}
